package com.webflux.dmeo.streamDemo;

import java.util.stream.IntStream;

/**
 * Created by wangzhanjin on 2018/5/31.
 */
public class StreamDemo1 {
    public static void main(String[] args) {
        int[] nums = {1, 2, 3};
        //外部迭代
        int sum = 0;
        for (int i : nums) {
            sum += i;
        }
        System.out.println("结果为："+sum);
        //使用Stream内部迭代，内部迭代，直接告诉他，需要sum就好了
        //外部迭代是串行的，需要拆分，内部迭代直接可以并行流，还可以短路操作（不需要全部处理完），惰性
        int sum1 = IntStream.of(nums).sum();
        System.out.println("stream结果为："+sum1);

        //sum是终止操作
        //map就是中间操作（返回stream操作，继续。。。）
        int sum2 = IntStream.of(nums).map(i->i*2).sum();
        int sum3 = IntStream.of(nums).map(i->StreamDemo1.doubleNum(i)).sum();
        int sum4 = IntStream.of(nums).map(StreamDemo1::doubleNum).sum();
        System.out.println("结果为sum4："+sum4);
        System.out.println("惰性求值就是终止没有调用的情况下，中间操作不会执行");
        IntStream.of(nums).map(StreamDemo1::doubleNum);
    }

    public static int doubleNum(int i) {
        System.out.println("==============执行了乘以2操作=======");
        return i * 2;
    }
}
